package com.wuseguang.springcloud.mina.changYing;

/**
 * 转换为大端模式
 */
public class ByteArrayUtils_BE {

    public static byte[] getBytes(short data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] getBytes(char data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data);
        bytes[0] = (byte) (data >> 8);
        return bytes;
    }

    public static byte[] getBytes_1(char data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data);
        return bytes;
    }

    public static byte[] getBytes_4(int data) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (data & 0xff);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        return bytes;
    }

    public static byte[] getBytes_1(int data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data & 0xff);
        return bytes;
    }

    /**
     * 取有效的两个字节
     */
    public static byte[] getBytes_2(int data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] getBytes_3(int data) {
        byte[] bytes = new byte[3];
        bytes[2] = (byte) (data & 0xff);
        bytes[1] = (byte) ((data & 0xff00) >> 8);
        bytes[0] = (byte) ((data & 0xff0000) >> 16);
        return bytes;
    }

    public static char getChar(byte[] bytes) {
        return (char) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
    }

    public static char getChar_1(byte[] bytes) {
        return (char) (0xff00 & (bytes[0] << 8));
    }

    public static int getInt_1(byte[] bytes) {
        return (0xff & bytes[0]);
    }

    public static int getInt_2(byte[] bytes) {
        return (0xff & bytes[1]) | (0xff00 & (bytes[0] << 8));
    }

    public static int getInt_3(byte[] bytes) {
        return (0xff & bytes[2]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[0] << 16));
    }

    public static int getInt_4(byte[] bytes) {
        return (0xff & bytes[3]) | (0xff00 & (bytes[2] << 8)) | (0xff0000 & (bytes[1] << 16))
                | (0xff000000 & (bytes[0] << 24));
    }

    /**
     * 合并2个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2) {
        byte[] unitByte = new byte[byte1.length + byte2.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        return unitByte;
    }

    /**
     * 合并3个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2, byte[] byte3) {
        byte[] unitByte = new byte[byte1.length + byte2.length + byte3.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte3, 0, unitByte, byte1.length + byte2.length, byte3.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        return unitByte;
    }

    /**
     * 合并4个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2, byte[] byte3, byte[] byte4) {
        byte[] unitByte = new byte[byte1.length + byte2.length + byte3.length + byte4.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        System.arraycopy(byte3, 0, unitByte, byte1.length + byte2.length, byte3.length);
        System.arraycopy(byte4, 0, unitByte, byte1.length + byte2.length + byte3.length, byte4.length);
        return unitByte;
    }

    /**
     * 合并5个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2, byte[] byte3, byte[] byte4, byte[] byte5) {
        byte[] unitByte = new byte[byte1.length + byte2.length + byte3.length + byte4.length + byte5.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        System.arraycopy(byte3, 0, unitByte, byte1.length + byte2.length, byte3.length);
        System.arraycopy(byte4, 0, unitByte, byte1.length + byte2.length + byte3.length, byte4.length);
        System.arraycopy(byte5, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length, byte5.length);
        return unitByte;
    }

    /**
     * 合并6个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2, byte[] byte3, byte[] byte4, byte[] byte5, byte[] byte6) {
        byte[] unitByte = new byte[byte1.length + byte2.length + byte3.length + byte4.length + byte5.length +
                byte6.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        System.arraycopy(byte3, 0, unitByte, byte1.length + byte2.length, byte3.length);
        System.arraycopy(byte4, 0, unitByte, byte1.length + byte2.length + byte3.length, byte4.length);
        System.arraycopy(byte5, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length, byte5.length);
        System.arraycopy(byte6, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length + byte5.length, byte6.length);
        return unitByte;
    }

    /**
     * 合并7个byte数组
     */
    public static byte[] unitByteArray(byte[] byte1, byte[] byte2, byte[] byte3, byte[] byte4, byte[] byte5, byte[] byte6, byte[] byte7) {
        byte[] unitByte = new byte[byte1.length + byte2.length + byte3.length + byte4.length + byte5.length +
                byte6.length + byte7.length];
        System.arraycopy(byte1, 0, unitByte, 0, byte1.length);
        System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length);
        System.arraycopy(byte3, 0, unitByte, byte1.length + byte2.length, byte3.length);
        System.arraycopy(byte4, 0, unitByte, byte1.length + byte2.length + byte3.length, byte4.length);
        System.arraycopy(byte5, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length, byte5.length);
        System.arraycopy(byte6, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length + byte5.length, byte6.length);
        System.arraycopy(byte7, 0, unitByte, byte1.length + byte2.length + byte3.length + byte4.length + byte5.length + byte6.length, byte7.length);
        return unitByte;
    }

    /**
     * 根据索引截取指定的byte数组
     */
    public static byte[] copyByte(byte[] data, int begin, int length) {
        if (length == 0) {
            return null;
        }
        byte[] newByte = new byte[length];
        System.arraycopy(data, begin, newByte, 0, length);
        return newByte;
    }

}
